Load balancing generally refers to distributing networking load among a plurality of available servers. Typical load balancing solutions are based upon routing. For example, one simple load balancing solution operates by routing all requests to all available servers, each of which is assigned a hash bucket (range). Each server in turn hashes each request's IP address and only handles those that fall into its hash bucket, while ignoring any others.
Many enterprises have certain types of databases (e.g., online analytical processing, or OLAP databases) that run on multiple servers. In general, enterprises want to have instances of these databases always available, one-hundred percent of the time. At the same time, the databases need to be refreshed, and different databases are refreshed at different times and on different schedules. For example, some may be refreshed once a week, some once per day, while others are refreshed multiple times (e.g., sixteen times) per day.
Moreover, the databases need to be load balanced between the servers. Existing network load balancing solutions, such as network load balancing services (NLBS), have a number of drawbacks when used with such differently refreshed databases. For example, all the databases on a server need to be taken offline to refresh any single database, because load balancing software operates at the server level. Further, NLBS monitors server availability rather than the availability of services running on the server, which causes other problems. For example, if a service stops running on a server, requests for that service are still sent to that server because the server is considered running.
NLBS also needs to maintain session “stickiness” because multiple queries are often associated with a single session. For example, queries sent to a client service such as Reporting Services to generate a report need to go to the same server, otherwise Reporting Services will generate errors. NLBS enforces session stickiness based on the IP address of the client service, which does not change, whereby all queries to a particular client service need to go to the same server.
What is desirable is a load balancing solution for servers that overcomes the above drawbacks, e.g., is capable of closely approaching or achieving one-hundred percent database uptime, while allowing different databases to be refreshed without affecting other databases on the same server. Further, if a service running on a server crashes or otherwise goes offline, the request is not sent to that failed service, even when the server running that service remains otherwise operational.